package br.com.speedprevweb.dao.impl;

import br.com.speedprevweb.dao.FolhaPagamentoDao;
import br.com.speedprevweb.model.FolhaPagamento;
import br.com.speedprevweb.util.HibernateUtil;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;


public class FolhaPagamentoDaoImpl implements FolhaPagamentoDao {

    private boolean valid(FolhaPagamento folhaPagamento) {
    //if (folhaPagamento.getCdFolhaPagamento().isEmpty()) {
      //return false;
    //} else {
      return !folhaPagamento.getCdFolhaPagamento().isEmpty();
    //}
  }

  @Override
  public boolean inserir(FolhaPagamento folhaPagamento) {
    Transaction tx = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    try {
      tx = session.beginTransaction();
      if (valid(folhaPagamento)) {
        session.save(folhaPagamento);
        return true;
      }
    } catch (HibernateException e) {
      tx.rollback();
      throw e;
    }
    return false;
  }

  @Override
  public boolean alterar(FolhaPagamento folhaPagamento) {
    Transaction tx = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    try {
      tx = session.beginTransaction();
      if (valid(folhaPagamento)) {
        session.update(folhaPagamento);
        return true;
      }
    } catch (HibernateException e) {
      tx.rollback();
      throw e;
    }
    return false;
  }

  @Override
  public boolean excluir(FolhaPagamento folhaPagamento) {
    Transaction tx = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    try {
      tx = session.beginTransaction();
      session.delete(folhaPagamento);
      return true;
    } catch (HibernateException e) {
      tx.rollback();
      throw e;
    }
  }

  @Override
  public FolhaPagamento getFolhaPagamento(FolhaPagamento folhaPagamento) {
    Transaction tx = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    String sql = "FROM FolhaPagamento fp where fp.idFolhaPagamento = :pId";
    try {
      tx = session.beginTransaction();
      Query query = session.createQuery(sql);
      query.setInteger("pId", folhaPagamento.getIdFolhaPagamento());
      return (FolhaPagamento) query.uniqueResult();
    } catch (HibernateException e) {
      tx.rollback();
      throw e;
    }
  }

  @Override
  public List listarTodos() {
    Transaction tx = null;
    Session session = HibernateUtil.getSessionFactory().openSession();
    String sql = "FROM FolhaPagamento fp order by fp.nuAno, fp.nuMes";
    try {
      tx = session.beginTransaction();
      Query query = session.createQuery(sql);
      return query.list();
    } catch (HibernateException e) {
      tx.rollback();
      throw e;
    }
  }  
}